﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Systemet.SideViews
{
    public partial class SideIntaktsBudgetering : UserControl
    {
        private Views.BudgeteringPerKund mainbudgperkund;
        private Views.BudgeteringPerProdukt mainbudgperprod;
        private Views.Intaktsrapporter mainRapp;

        private KundController kC;
        private IEnumerable<Kundregister> kunder;
        private string currentKundID = "";
        private string currentProdukt = "";
        private Domain.ProdukController pC;
        private IEnumerable<Produktregister> products;

        private Domain.RapportController rC;
        public SideIntaktsBudgetering()
        {
            InitializeComponent();
            AccessController.Instance.SidMeny = this;
            if (AccessController.Instance.IntäktsbudgetUnlocked)
            {
                btnPK.Enabled = AccessController.Instance.UserRoleLoggedInUser.BudgeteringPerKundSynlig;
                btnPP.Enabled = AccessController.Instance.UserRoleLoggedInUser.BudgeteringPerProduktSynlig;
            }
            btnRap.Enabled = AccessController.Instance.UserRoleLoggedInUser.IntäktsrapporterSök;
        }
        private void SideIntaktsBudgetering_Load(object sender, EventArgs e)
        {
            FlowController.Instance.StarSkarm();

        }

        //Start Budget Per KUND
        //Öppnar budget per kund vyn och stänger alla andra om de är öppna
        private void btnPK_Click(object sender, EventArgs e)
        {
            if (pnlBPK.Height > 40)
            {
                pnlBPK.Height = 30;
                pnlRapport.Height = 30;
                pnlPP.Height = 30;
                FlowController.Instance.StarSkarm();
            }
            else
            {
                pnlRapport.Height = 30;
                pnlPP.Height = 30;
                int height = 367;
                pnlBPK.Height = height;
                FlowController.Instance.ShowSpecifikMenu(FlowController.Instance.MainTabView[0]);
                AccessController.Instance.MainView = (Views.BudgeteringPerKund)FlowController.Instance.getUserControl(FlowController.Instance.MainTabView[0]);
                mainbudgperkund = (Views.BudgeteringPerKund)AccessController.Instance.ReturnMainView();

                //Laddar in sökkriterier
                RetrieveCustomers(sender, e);
            }
        }
        //Hämtar alla inlagda kunder beroende på två sökkriterier
        // Alla kunder som blivit budgeterade samt alla kunder inlagda i databasen
        public void UpdateCustomerList(IEnumerable<Produktregister> prodList)
        {   //test för att hämta ny information om kund
            fillSearchOptions(prodList);
        }
        private void RetrieveCustomers(object sender, EventArgs e)
        {
            kC = new KundController();
            if (rBBudgetedCustomers.Checked)
            {
                kunder = kC.RetrieveCustomersOnBudget("");
            }
            if (rBAllCustomers.Checked)
            {
                kunder = kC.RetrieveCustomers();
            }
            cmbKundOmrade_SelectedIndexChanged(sender, e);
        }
        //Filtrar kundnamn efter vald kundkategori
        private void FilterCustomers(string kundOmrade)
        {
            cmbProdNamn.Items.Clear();
            cmBProdK.Items.Clear();
            cmbKund.Items.Clear();
            foreach (Kundregister k in kunder)
            {
                if (k.kundkategori.Contains(kundOmrade) && !cmbKund.Items.Contains(k.kundNamn))
                {
                    cmbKund.Items.Add(k.kundNamn);
                }
            }
        }
        //Vid val av kundkategori rensas all data (Clean slate) för att sedan anropa filtrering av kundnamn i filtercustomers
        private void cmbKundOmrade_SelectedIndexChanged(object sender, EventArgs e)
        {

            string kundOmrade = cmbKundOmrade.Text;
            kC = new KundController();
            kC.RemoveSumTb();
            kC.ShowCurrentCustomer("", "");
            kC.UpdateCustomerBudgetDGV("", "", "", "", "");
            cmbKund.Text = "";
            if (cmbKundOmrade.Text == "Alla")
            {
                kundOmrade = "";
            }
            FilterCustomers(kundOmrade);


        }
        //Vid kundförändringar kommer kundens namn och ID skickas till MainVyn för att användaren ska kunna se
        //Vilken kund denne jobbar med, sedan uppdateras datagridviewn med valda kriterier
        private void onFilterChanges(object sender, EventArgs e)
        {
            if (sender == cmbKund)
            {
                cmbProdNamn.Items.Clear();
                cmBProdK.Items.Clear();
                cmbGradT.SelectedIndex = 0;
                cmbGradA.SelectedIndex = 0;
                cmbProdNamn.Items.Insert(0, "Alla");
                cmBProdK.Items.Insert(0, "Alla");

                kC = new KundController();
                kC.ShowCurrentCustomer(GetCustomerID(cmbKund.Text), cmbKund.Text);
            }
            if (sender == cmBProdK)
            {
                cmbProdNamn.Items.Clear();
            }

            string kundnamn = cmbKund.Text;
            string kundid = GetCustomerID(kundnamn);
            string produkt = cmbProdNamn.Text;
            string prodkategori = cmBProdK.Text;
            string gradA = cmbGradA.Text;
            string gradT = cmbGradT.Text;

            if (gradA == "Alla")
            {
                gradA = "";
            }
            if (gradT == "Alla")
            {
                gradT = "";
            }
            if (produkt == "Alla")
            {
                produkt = "";
            }
            if (prodkategori == "Alla")
            {
                prodkategori = "";
            }

            kC = new KundController();
            IEnumerable<Produktregister> produkter = kC.UpdateCustomerBudgetDGV(kundid, produkt, prodkategori, gradA, gradT);
            fillSearchOptions(produkter);

        }
        //Produkt comboboxes fylls med valda tillgängliga sökkriterier
        private void fillSearchOptions(IEnumerable<Produktregister> prodlista)
        {
            foreach (Produktregister p in prodlista)
            {
                if (!cmBProdK.Items.Contains(p.Produktkategori.produktKategoriNamn))
                {
                    cmBProdK.Items.Add(p.Produktkategori.produktKategoriNamn);
                }
                foreach (Produktregister pr in prodlista)
                {
                    if (cmBProdK.Text == "Alla" || cmBProdK.Text.Contains(p.Produktkategori.produktKategoriNamn) || cmBProdK.Text == "")
                    {
                        if (!cmbProdNamn.Items.Contains(p.produkt))
                        {
                            cmbProdNamn.Items.Add(p.produkt);
                        }
                    }
                }
            }
        }
        //Hämtar och returnerar aktuellt kundID för valt kundnamn
        private string GetCustomerID(string kundNamn)
        {
            foreach (Kundregister k in kunder)
            {
                if (kundNamn == "")
                {
                    return "";
                }
                if (k.kundNamn.Contains(kundNamn))
                {
                    return k.kundID;
                }
            }
            return "";
        }
        //SLUT Budget Per KUND

        //Start Budget per PRodukt
        // Öppnar budget per produktvyn och stänger allt annat om något är öppet
        private void btnPP_Click(object sender, EventArgs e)
        {
            if (pnlPP.Height > 40)
            {
                pnlPP.Height = 30;
                pnlBPK.Height = 30;
                FlowController.Instance.StarSkarm();
            }
            else
            {
                pnlRapport.Height = 30;
                pnlBPK.Height = 30;
                pnlPP.Height = 502;
                FlowController.Instance.ShowSpecifikMenu(FlowController.Instance.MainTabView[1]);
                AccessController.Instance.MainView = (Views.BudgeteringPerProdukt)FlowController.Instance.getUserControl(FlowController.Instance.MainTabView[1]);
                mainbudgperprod = (Views.BudgeteringPerProdukt)AccessController.Instance.ReturnMainView();

                //Läser in alla produkter
                RetrieveAllProducts(sender, e);

            }

        }

        //Hämta alla produktrader beroende på vilket sökkriterie som gjorts
        // Antingen alla produkter eller de som har budgeterats på
        private void RetrieveAllProducts(object sender, EventArgs e)
        {
            pC = new Domain.ProdukController();
            cmbProdAvd.Text = "";
            if (rBAllProducts.Checked)
            {
                products = pC.Produktlista;
            }
            if (rBBudgetedProducts.Checked)
            {
                products = pC.RetrieveAllBudgetedProducts();
            }
            FillComboboxes(sender, e);
        }
        //Rensning av tidigare gjorda sökkriterier beroende på vilken control som utför rensningen
        private void clearSearchOptions(object sender, EventArgs e)
        {
            mainbudgperprod = (Views.BudgeteringPerProdukt)AccessController.Instance.MainView;
            mainbudgperprod.clearDatagridView();

            object[] GradItems = new object[cmbGradTillagg.Items.Count];
            cmbGradTillagg.Items.CopyTo(GradItems, 0);
            cmbGradAvtal.Items.Clear();
            cmbGradTillagg.Items.Clear();
            cmbGradAvtal.Items.AddRange(GradItems);
            cmbGradTillagg.Items.AddRange(GradItems);

            if (sender == cmbProdAvd || sender == btnPP || sender == rBBudgetedProducts || sender == rBAllProducts)
            {
                cmbProdKategori.Items.Clear();
                cmbProdGrupp.Items.Clear();
                cmbProductNamn.Items.Clear();
                cmbProductID.Items.Clear();
                cmbProdKategori.Text = "";
                cmbProdGrupp.Text = "";
                cmbProductNamn.Text = "";
                cmbProductID.Text = "";

            }
            if (sender == cmbProdKategori && cmbProdKategori.Focused)
            {
                cmbProdGrupp.Items.Clear();
                cmbProductNamn.Items.Clear();
                cmbProductID.Items.Clear();
                cmbProdGrupp.Text = "";
                cmbProductNamn.Text = "";
                cmbProductID.Text = "";

            }
            if (sender == cmbProdGrupp && cmbProdGrupp.Focused)
            {
                cmbProductNamn.Items.Clear();
                cmbProductID.Items.Clear();
                cmbProductNamn.Text = "";
                cmbProductID.Text = "";

            }

        }
        //Fyller comboxoses med värden, beroende på vem som triggar metoden (Vilken control användaren använt)
        private void FillComboboxes(object sender, EventArgs e)
        {


            string prodDepartment = cmbProdAvd.Text;
            if (cmbProdAvd.Text == "Alla")
            {
                prodDepartment = "";

            }
            if (cmbProdAvd.Text == "Utveckling/förvaltning")
            {
                prodDepartment = "Utv/Förv";
            }
            if (sender == cmbProdAvd || sender == btnPP || sender == rBBudgetedProducts || sender == rBAllProducts)
            {
                clearSearchOptions(sender, e);
                foreach (Produktregister p in products)
                {
                    if (p.avdelningsnamn.Contains(prodDepartment))
                    {
                        if (!cmbProdKategori.Items.Contains(p.Produktkategori.produktKategoriNamn))
                        {
                            cmbProdKategori.Items.Add(p.Produktkategori.produktKategoriNamn);
                        }
                        if (!cmbProdGrupp.Items.Contains(p.Produktgrupp.produktGruppNamn))
                        {
                            cmbProdGrupp.Items.Add(p.Produktgrupp.produktGruppNamn);
                        }
                        if (!cmbProductNamn.Items.Contains(p.produkt))
                        {
                            cmbProductNamn.Items.Add(p.produkt);
                        }
                        if (!cmbProductID.Items.Contains(p.produktID))
                        {
                            cmbProductID.Items.Add(p.produktID);
                        }
                    }

                }
            }
            if (sender == cmbProdKategori && cmbProdKategori.Focused)
            {
                clearSearchOptions(sender, e);
                foreach (Produktregister p in products)
                {
                    if (p.Produktkategori.produktKategoriNamn.Contains(cmbProdKategori.Text))
                    {
                        if (!cmbProdGrupp.Items.Contains(p.Produktgrupp.produktGruppNamn))
                        {
                            cmbProdGrupp.Items.Add(p.Produktgrupp.produktGruppNamn);
                        }
                        if (!cmbProductNamn.Items.Contains(p.produkt))
                        {
                            cmbProductNamn.Items.Add(p.produkt);
                        }
                        if (!cmbProductID.Items.Contains(p.produktID))
                        {
                            cmbProductID.Items.Add(p.produktID);
                        }
                    }
                }

            }

            if (sender == cmbProdGrupp && cmbProdGrupp.Focused)
            {
                clearSearchOptions(sender, e);
                foreach (Produktregister p in products)
                {
                    if (p.Produktgrupp.produktGruppNamn.Contains(cmbProdGrupp.Text))
                    {
                        if (!cmbProductNamn.Items.Contains(p.produkt))
                        {
                            cmbProductNamn.Items.Add(p.produkt);
                        }
                        if (!cmbProductID.Items.Contains(p.produktID))
                        {
                            cmbProductID.Items.Add(p.produktID);
                        }
                    }
                }
            }
        }
        //Vid val av produktnamn sätts produktid comboboxen till matchande produktID text
        // OCh utför en uppdatering av mainvyns datagridview
        private void onProdNameChange(object sender, EventArgs e)
        {
            kC = new KundController();
            cmbGradAvtal.SelectedIndex = 0;
            cmbGradTillagg.SelectedIndex = 0;

            if (sender == cmbProductNamn && cmbProductNamn.Focused)
            {
                foreach (Produktregister p in products)
                {
                    if (p.produkt == cmbProductNamn.Text)
                    {
                        cmbProductID.Text = p.produktID;
                        break;
                    }
                }

                UpdateDGV();
            }
        }
        //Vid val av ProduktID sätts Produktnamn comboboxen till matchande Produktnamns text
        // OCh utför en uppdatering av mainvyns datagridview
        private void onProdIDChange(object sender, EventArgs e)
        {

            cmbGradAvtal.SelectedIndex = 0;
            cmbGradTillagg.SelectedIndex = 0;
            if (sender == cmbProductID && cmbProductID.Focused)
            {

                foreach (Produktregister p in products)
                {
                    if (p.produktID == cmbProductID.Text)
                    {
                        cmbProductNamn.Text = p.produkt;
                        break;
                    }
                }
                UpdateDGV();
            }
        }
        //Vid val av GradT eller GradA uppdateras datagridview i mainvy
        private void onGradChange(object sender, EventArgs e)
        {
            if (sender == cmbGradAvtal || sender == cmbGradTillagg)
            {
                UpdateDGV();
            }
        }
        //Metod för att uppdatera datagridviewn i mainVy
        //deklarering av variabler för att bli inparametrar till controlklassens uppdateringsmetod
        private void UpdateDGV()
        {
            string prodNamn = cmbProductNamn.Text;
            string prodID = cmbProductID.Text;
            string gradT = cmbGradTillagg.Text;
            string gradA = cmbGradAvtal.Text;
            if (gradA == "Alla")
            {
                gradA = "";
            }
            if (gradT == "Alla")
            {
                gradT = "";
            }
            //SvarsTider!
            pC = new Domain.ProdukController();
            mainbudgperprod = (Views.BudgeteringPerProdukt)AccessController.Instance.MainView;

            //Verifierar att vald produkt existerar i databasen
            bool Exists = pC.Produktlista.Any(p => p.produktID.TrimEnd() == prodID.TrimEnd());
            if (Exists)
            {
                pC.UpdateBudgetPerProduktDGV(prodID, prodNamn, gradA, gradT);
                mainbudgperprod.CurrentProduct(prodID, prodNamn);
            }
            else
            {
                mainbudgperprod.clearDatagridView();
            }
        }
        //Slut Budget per PRodukt

        //Start IntäktsRapporter vid tryck av Rapportknappen, stänger de andra om de är öppna'
        // Vid redan öppen rapportflik, stängs den.
        private void btnRap_Click(object sender, EventArgs e)
        {
            if (pnlRapport.Height > 40)
            {
                pnlBPK.Height = 30;
                pnlRapport.Height = 30;
                pnlPP.Height = 30;
                FlowController.Instance.StarSkarm();
            }
            else
            {
                pnlBPK.Height = 30;
                pnlPP.Height = 30;
                pnlRapport.Height = 470;
                FlowController.Instance.ShowSpecifikMenu(FlowController.Instance.MainTabView[2]);
                AccessController.Instance.MainView = (Views.Intaktsrapporter)FlowController.Instance.getUserControl(FlowController.Instance.MainTabView[2]);
                mainRapp = (Views.Intaktsrapporter)AccessController.Instance.ReturnMainView();
            }
        }
        /// <summary>
        /// Enablar eller disablar sökningscomboboxes, beroende på vad för rapporttyp man valt
        /// </summary>
        private void IsEditable()
        {
            bool isEditable = true;
            cmbKundNamn.Enabled = true;
            if (cmbRapportval.Text == "Budget per kundkategori")
            {
                cmbKundKategori.Enabled = isEditable;
                cmbKundNamn.Enabled = false;
            }
            if (cmbRapportval.Text == "Budget per produktkategori")
            {
                cmbProduktionsOmrade.Enabled = false;
                cmbProduktKategori.Enabled = isEditable;
                cmbProduktgrupp.Enabled = false;
                cmbProduktNamn.Enabled = false;
            }

            else if (cmbRapportval.Text == "Budget per kund och produktgrupp" || cmbRapportval.Text == "Budget per produktgrupp")
            {
                if (cmbRapportval.Text == "Budget per produktgrupp")
                {
                    cmbProduktionsOmrade.Enabled = false;
                    cmbProduktKategori.Enabled = false;
                    cmbProduktgrupp.Enabled = isEditable;
                    cmbProduktNamn.Enabled = false;
                }
                if (cmbRapportval.Text == "Budget per kund och produktgrupp")
                {
                    cmbProduktionsOmrade.Enabled = false;
                    cmbProduktKategori.Enabled = false;
                    cmbProduktgrupp.Enabled = false;
                    cmbProduktNamn.Enabled = false;
                }
            }
            else if (cmbRapportval.Text == "Budget per kund och produktionsområde" || cmbRapportval.Text == "Budget per produktionsområde" || cmbRapportval.Text == "Budget per produkt inom produktionsområde")
            {
                cmbProduktionsOmrade.Enabled = isEditable;
                cmbProduktKategori.Enabled = false;
                cmbProduktgrupp.Enabled = false;
                cmbProduktNamn.Enabled = false;
            }
            else
            {
                cmbProduktionsOmrade.Enabled = isEditable;
                cmbProduktKategori.Enabled = isEditable;
                cmbProduktgrupp.Enabled = isEditable;
                cmbProduktNamn.Enabled = isEditable;
            }

        }
        //Rensar Alla comboxes
        private void clearReportCombos(bool IsCmbCustomer)
        {
            rC = new Domain.RapportController();
            mainRapp = (Views.Intaktsrapporter)AccessController.Instance.MainView;
            mainRapp.clearDatagridView();

            cmbProduktKategori.Items.Clear();
            cmbProduktgrupp.Items.Clear();
            cmbProduktNamn.Items.Clear();
            cmbProduktKategori.Text = "";
            cmbProduktgrupp.Text = "";
            cmbProduktNamn.Text = "";
            if (IsCmbCustomer)
            {
                object[] reportItems = new object[cmbProduktionsOmrade.Items.Count];
                cmbProduktionsOmrade.Items.CopyTo(reportItems, 0);
                cmbProduktionsOmrade.Items.Clear();
                cmbProduktionsOmrade.Text = "";
                cmbProduktionsOmrade.Items.AddRange(reportItems);
            }

        }

        //När ett Rapportval görs, visas endast de sökkriterier som tillhör just den vyn
        private void cmbRapportval_SelectedIndexChanged(object sender, EventArgs e)
        {
            rC = new Domain.RapportController();
            mainRapp = (Views.Intaktsrapporter)AccessController.Instance.MainView;
            mainRapp.clearDatagridView();
            rC.ClearSumTB();
            cmbKundNamn.Text = "";
            cmbKundKategori.Text = "";
            flpKundFiltrering.Height = 0;
            flpProduktFiltrering.Height = 0;
            IsEditable();
            if (cmbRapportval.Text == "Kunder per produkt")
            {
                clearReportCombos(false);
                RetrieveAllProducts();
                flpProduktFiltrering.Height = 201;
            }
            if (cmbRapportval.Text == "Ej budgeterade kunder")
            {
                clearReportCombos(false);
                //rC.NotBudgetedCustomers();
                mainRapp.UpdateDgvSourceEjBudgeteradeKunder();
            }
            if (cmbRapportval.Text == "Ej budgeterade produkter")
            {
                clearReportCombos(false);
                //rC.NotBudgetedProducts();
                mainRapp.UpdateDgvSourceEjBudgeteradeProdukter();
            }
            if (cmbRapportval.Text == "Budget per kund")
            {
                clearReportCombos(true);
                cmbKundKategori.Items.Clear();
                cmbKundKategori.Text = "";
                flpKundFiltrering.Height = 132;
                RetrieveCustomersWithBudgets();
            }
            if (cmbRapportval.Text == "Budget per kund och produkt")
            {
                clearReportCombos(true);
                cmbKundKategori.Items.Clear();
                cmbKundKategori.Text = "";
                RetrieveCustomersWithBudgets();
                flpKundFiltrering.Height = 132;
                flpProduktFiltrering.Height = 201;
                cmbProduktionsOmrade.Enabled = false;
                cmbProduktgrupp.Enabled = false;
                cmbProduktNamn.Enabled = false;
                cmbProduktKategori.Enabled = false;
            }
            if (cmbRapportval.Text == "Budget per kund och produktgrupp" || cmbRapportval.Text == "Budget per kund och produktionsområde")
            {
                clearReportCombos(true);
                cmbKundKategori.Items.Clear();
                cmbKundKategori.Text = "";
                RetrieveCustomersWithBudgets();
                flpKundFiltrering.Height = 132;
                flpProduktFiltrering.Height = 201;
                cmbProduktionsOmrade.Enabled = false;
            }
            if (cmbRapportval.Text == "Budget per produkt")
            {
                clearReportCombos(true);
                flpProduktFiltrering.Height = 201;
                RetrieveAllProducts();
            }
            if (cmbRapportval.Text == "Budget per produktgrupp")
            {
                clearReportCombos(true);
                flpProduktFiltrering.Height = 201;
                RetrieveAllProducts();
            }
            if (cmbRapportval.Text == "Budget per produktionsområde")
            {
                clearReportCombos(true);
                flpProduktFiltrering.Height = 201;
                RetrieveAllProducts();
            }
            if (cmbRapportval.Text == "Budget per produkt inom produktionsområde")
            {
                clearReportCombos(true);
                flpProduktFiltrering.Height = 201;
                RetrieveAllProducts();
            }
            if (cmbRapportval.Text == "Budget per kundkategori")
            {
                flpKundFiltrering.Height = 132;
                RetrieveCustomersWithBudgets();
            }

            if (cmbRapportval.Text == "Budget per produktkategori")
            {
                clearReportCombos(true);
                flpProduktFiltrering.Height = 201;
                RetrieveAllProducts();
            }
            if (cmbRapportval.Text == "Budget per kund fallande")
            {
                //rC.BudgetedCustFalling();
                mainRapp.UpdateDgvSourceBudgetPerKundFallande();
            }
            if (cmbRapportval.Text == "Budget per produkt fallande")
            {
                //rC.BudgetedProductsFalling();
                mainRapp.UpdateDgvSourceBudgetPerProduktFallande();
            }
            if (cmbRapportval.Text == "Totalt")
            {
                //rC.BudgetedTotals();
                mainRapp.UpdateDgvSourceTotalt();
            }
        }

        //Hämtar alla produkter
        private void RetrieveAllProducts()
        {
            rC = new Domain.RapportController();
            kC = new KundController();
            //Rapportval kunder per produkt
            if (cmbRapportval.Text == "Kunder per produkt")
            {
                products = rC.BudgetedProducts();
                SortProductsByArea(cmbProduktionsOmrade, null);
            }
            //Rapportval Budget per Kund
            if (cmbRapportval.Text == "Budget per kund")
            {
                products = kC.ProductsBudgetedOnCustomer(currentKundID);
                ShowCustomerBudgets();
                SortProductsByArea(cmbProduktionsOmrade, null);
            }
            if (cmbRapportval.Text == "Budget per kund och produkt")
            {
                products = kC.ProductsBudgetedOnCustomer(currentKundID);
                SortProductsByArea(cmbProduktionsOmrade, null);
            }
            if (cmbRapportval.Text == "Budget per kund och produktgrupp")
            {
                products = kC.ProductsBudgetedOnCustomer(currentKundID);
                SortProductsByArea(cmbProduktKategori, null);
            }
            if (cmbRapportval.Text == "Budget per kund och produktionsområde")
            {
                products = kC.ProductsBudgetedOnCustomer(currentKundID);
                SortProductsByArea(null, null);
            }
            if (cmbRapportval.Text == "Budget per produkt" || cmbRapportval.Text == "Budget per produktionsområde" || cmbRapportval.Text == "Budget per produkt inom produktionsområde" || cmbRapportval.Text == "Budget per produktkategori")
            {
                products = rC.BudgetedProducts();
                SortProductsByArea(cmbProduktionsOmrade, null);
            }
            if (cmbRapportval.Text == "Budget per produktgrupp")
            {
                products = rC.BudgetedProducts();
                SortProductsByArea(cmbProduktKategori, null);
            }
        }

        private void ShowCustomerBudgets()
        {
            rC = new Domain.RapportController();
            string prodDepartment = cmbProduktionsOmrade.Text;

            if (prodDepartment.Contains("Utveckling"))
            {
                prodDepartment = "Utv/Förv";
            }
            //rC.BudgetPerKund(currentKundID, cmbProduktNamn.Text, cmbProduktgrupp.Text, cmbProduktKategori.Text, prodDepartment);
            mainRapp.UpdateDgvSourceBudgetPerKund(currentKundID, cmbProduktNamn.Text, cmbProduktgrupp.Text, cmbProduktKategori.Text, prodDepartment);

        }

        //Besämmer vad som händer när man trycker på en "Produkt" Combobox
        private void TaskChooser(object sender, EventArgs e)
        {
            if (sender == cmbProduktNamn)
            {
                string prodid = "";
                string prodnamn = "";
                foreach (Produktregister p in products)
                {
                    if (p.produkt == cmbProduktNamn.Text)
                    {
                        prodid = p.produktID;
                        prodnamn = p.produkt;
                        break;
                    }
                }
                if (cmbRapportval.Text == "Kunder per produkt")
                {
                    if (sender == cmbProduktNamn)
                    {
                        rC = new Domain.RapportController();
                        //rC.KunderPerProdukt(prodid, prodnamn);
                        mainRapp.UpdateDgvSourceKunderPerProdukt(prodid, prodnamn);
                    }
                }
                if (cmbRapportval.Text == "Budget per kund och produkt")
                {
                    if (sender == cmbProduktNamn)
                    {
                        //rC = new Domain.RapportController();
                        //rC.BudgetPerKundOchProdukt(currentKundID, prodid, prodnamn);
                        mainRapp.UpdateDgvSourceBudgetPerKundOchProdukt(currentKundID, prodid, prodnamn);
                    }
                }
                if (cmbRapportval.Text == "Budget per produkt")
                {
                    if (sender == cmbProduktNamn)
                    {
                        //rC = new Domain.RapportController();
                        //rC.BudgetPerProduct(prodid);
                        mainRapp.UpdateDgvSourceBudgetPerProdukt(prodid);
                    }
                }
                SortProductsByArea(sender, e);
            }
            //Budget per kund och produktgrupp START
            if (cmbRapportval.Text == "Budget per kund och produktgrupp" || cmbRapportval.Text == "Budget per kund och produktionsområde" || cmbRapportval.Text == "Budget per produktionsområde" || cmbRapportval.Text == "Budget per produkt inom produktionsområde")
            {
                if (sender == cmbProduktgrupp)
                {
                    rC = new Domain.RapportController();
                    //rC.budgetedCustNProductgroups(currentKundID, cmbProduktgrupp.Text);
                    mainRapp.UpdateDgvSourceBudgetPerKundOchProduktgrupp(currentKundID, cmbProduktgrupp.Text);
                }
                if (sender == cmbProduktionsOmrade)
                {
                    rC = new Domain.RapportController();
                    string prodDepartment = cmbProduktionsOmrade.Text;


                    if (cmbRapportval.Text == "Budget per produktionsområde")
                    {
                        if (prodDepartment.Contains("Utveckling"))
                        {
                            prodDepartment = "Utv/Förv";
                        }
                        //rC.BudgetedProductAreas(prodDepartment);
                        mainRapp.UpdateDgvSourceBudgetPerProduktionsområde(prodDepartment);
                    }
                    else if (cmbRapportval.Text == "Budget per produkt inom produktionsområde")
                    {
                        if (prodDepartment.Contains("Utveckling"))
                        {
                            prodDepartment = "Utv/Förv";
                        }
                        else if (prodDepartment.Contains("Alla"))
                        {
                            prodDepartment = "";
                        }
                        //rC.BudgetedProductsPerAreas(prodDepartment);
                        mainRapp.UpdateDgvSourceBudgetPerProduktInomProduktionsområde(prodDepartment);
                    }
                    else
                    {
                        //rC.budgetedCustNProductionAreas(currentKundID, prodDepartment);
                        mainRapp.UpdateDgvSourceBudgetPerProduktOchProduktionsområde(currentKundID, prodDepartment);
                    }
                }
            }
            else if (cmbRapportval.Text == "Budget per produktgrupp")
            {
                //rC = new Domain.RapportController();
                //rC.BudgetedProductGroups(cmbProduktgrupp.Text);
                mainRapp.UpdateDgvSourceBudgetPerProduktgrupp(cmbProduktgrupp.Text);
            }
            //Budget per kund och produktgrupp SLUT
            else if (cmbRapportval.Text == "Budget per produktkategori")
            {
                //rC = new Domain.RapportController();
                //rC.BudgetedProductCategories(cmbProduktKategori.Text);
                mainRapp.UpdateDgvSourceBudgetPerProduktkategori(cmbProduktKategori.Text);
            }
            else if (cmbRapportval.Text == "Budget per kundkategori")
            {
                //rC = new Domain.RapportController();
                //rC.BudgetedCustCategory(cmbKundKategori.Text);
                mainRapp.UpdateDgvSourceBudgetPerKundkategori(cmbKundKategori.Text);
            }
            else
            {
                SortProductsByArea(sender, e);
            }
            //Budget per Kund och produkt start
            if (cmbRapportval.Text == "Budget per kund och produkt")
            {
                SortProductsByArea(sender, e);
            }
            //Budget per Kund och produkt slut
        }

        //Sorterar produkterna i comboboxarna efter tidigare uppfyllda kriterier
        private void SortProductsByArea(object sender, EventArgs e)
        {
            string prodDepartment = cmbProduktionsOmrade.Text;
            string prodCategory = cmbProduktKategori.Text;

            if (cmbRapportval.Text == "Budget per kund och produktionsområde" || cmbRapportval.Text == "Budget per produktionsområde")
            {
                cmbProduktionsOmrade.Items.Clear();
                foreach (Produktregister p in products)
                {
                    if (!cmbProduktionsOmrade.Items.Contains(p.avdelningsnamn))
                    {
                        cmbProduktionsOmrade.Items.Add(p.avdelningsnamn);
                    }
                }
            }

            //I databasen heter utveckling och förvaltning (Utv/Förv)
            if (prodDepartment.Contains("Utveckling"))
            {
                prodDepartment = "Utv/Förv";
            }

            if (prodDepartment.Contains("Alla"))
            {
                prodDepartment = "";
            }

            if (sender == cmbProduktionsOmrade) //Om inparameter är produktionsområde ska produkter sorteras efter det
            {
                clearReportCombos(false);

                foreach (Produktregister p in products)
                {
                    if (p.avdelningsnamn.Contains(prodDepartment))
                    {
                        if (!cmbProduktKategori.Items.Contains(p.Produktkategori.produktKategoriNamn))
                        {
                            cmbProduktKategori.Items.Add(p.Produktkategori.produktKategoriNamn);
                        }
                        if (!cmbProduktgrupp.Items.Contains(p.Produktgrupp.produktGruppNamn))
                        {
                            cmbProduktgrupp.Items.Add(p.Produktgrupp.produktGruppNamn);
                        }
                        if (!cmbProduktNamn.Items.Contains(p.produkt))
                        {
                            cmbProduktNamn.Items.Add(p.produkt);
                        }
                    }
                }
            }
            if (sender == cmbProduktKategori) //Om inparameter är produktkategori ska produktgrupper sorteras efter det
            {
                cmbProduktgrupp.Items.Clear();
                cmbProduktNamn.Items.Clear();
                cmbProduktgrupp.Text = "";
                cmbProduktNamn.Text = "";
                foreach (Produktregister p in products)
                {
                    if (p.Produktkategori.produktKategoriNamn.Contains(cmbProduktKategori.Text))
                    {
                        if (!cmbProduktgrupp.Items.Contains(p.Produktgrupp.produktGruppNamn))
                        {
                            cmbProduktgrupp.Items.Add(p.Produktgrupp.produktGruppNamn);
                        }
                        if (!cmbProduktNamn.Items.Contains(p.produkt))
                        {
                            cmbProduktNamn.Items.Add(p.produkt);
                        }
                    }
                }
            }
            if (sender == cmbProduktgrupp) //Om inparameter är Produktgrupp ska Produktnamn sorteras efter det
            {
                cmbProduktNamn.Items.Clear();
                cmbProduktNamn.Text = "";
                foreach (Produktregister p in products)
                {
                    if (p.Produktgrupp.produktGruppNamn.Contains(cmbProduktgrupp.Text))
                    {
                        if (!cmbProduktNamn.Items.Contains(p.produkt))
                        {
                            cmbProduktNamn.Items.Add(p.produkt);
                        }
                    }
                }
            }
            if (cmbRapportval.Text == "Budget per kund")
            {
                ShowCustomerBudgets();
            }
        }
        //Hämtar alla kunder som tillhör en vald kundkategori och har blivit budgeterade    
        private void RetrieveCustomersWithBudgets()
        {
            kC = new KundController();
            kunder = kC.RetrieveCustomersOnBudget(cmbKundKategori.Text);
            cmbKundKategori.Items.Clear();
            cmbKundKategori.Items.Insert(0, "Alla");
            if (cmbRapportval.Text == "Budget per kundkategori")
            {
                cmbKundKategori.Items.RemoveAt(0);
            }

            cmbKundNamn.Items.Clear();

            foreach (Kundregister k in kunder)
            {
                if (!cmbKundKategori.Items.Contains(k.kundkategori))
                {
                    cmbKundKategori.Items.Add(k.kundkategori);
                }

                if (!cmbKundNamn.Items.Contains(k.kundNamn))
                {
                    cmbKundNamn.Items.Add(k.kundNamn);
                }
            }
        }
        //Val av kundkategori sorterar kundnamns comboboxen efter vald kategori
        //Om Rapportval budget för kundkategori, så hämtas alla budgeteringar gjorda på användarens val
        private void cmbKundKategori_SelectedIndexChanged(object sender, EventArgs e)
        {

            string kundKat;
            clearReportCombos(true);
            cmbKundNamn.Text = "";

            if (cmbRapportval.Text == "Budget per kundkategori")
            {
                //rC = new Domain.RapportController();
                //rC.BudgetedCustCategory(cmbKundKategori.Text);
                mainRapp.UpdateDgvSourceBudgetPerKundkategori(cmbKundKategori.Text);
            }
            else
            {
                if (cmbKundKategori.Text == "Alla")
                {
                    kundKat = "";
                }

                else
                {
                    kundKat = cmbKundKategori.Text;
                }
                cmbKundNamn.Items.Clear();
                foreach (Kundregister k in kunder)
                {
                    if (kundKat == k.kundkategori || kundKat == "")
                    {
                        if (!cmbKundNamn.Items.Contains(k.kundNamn))
                        {
                            cmbKundNamn.Items.Add(k.kundNamn);
                        }
                    }
                }
            }
        }
        //Val av kundnamn leder till deklarering av kundid så att det koms åt från till exempel budget per produkt och kund
        private void cmbKundNamn_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (cmbRapportval.Text == "Budget per kund och produktgrupp")
            {
                if (cmbKundNamn.Text == "")
                {
                    cmbProduktgrupp.Enabled = false;
                }

                else
                {
                    cmbProduktgrupp.Enabled = true;
                }

            }
            if (cmbRapportval.Text == "Budget per kund och produkt")
            {
                if (cmbKundNamn.Text == "")
                {
                    cmbProduktionsOmrade.Enabled = false;
                    cmbProduktgrupp.Enabled = false;
                    cmbProduktNamn.Enabled = false;
                    cmbProduktKategori.Enabled = false;
                }
                else
                {
                    cmbProduktionsOmrade.Enabled = true;
                    cmbProduktgrupp.Enabled = true;
                    cmbProduktNamn.Enabled = true;
                    cmbProduktKategori.Enabled = true;
                }
            }
            if (cmbRapportval.Text == "Budget per kund och produktionsområde")
            {
                if (cmbKundNamn.Text == "")
                {
                    cmbProduktionsOmrade.Enabled = false;
                }
                else
                {
                    cmbProduktionsOmrade.Enabled = true;
                }
            }
            clearReportCombos(true);

            foreach (Kundregister k in kunder)
            {
                if (k.kundNamn == cmbKundNamn.Text)
                {
                    currentKundID = k.kundID;
                    break;
                }
            }
            RetrieveAllProducts();
        }
    }
}
